#ifndef CAN_SIGNAL_H
#define CAN_SIGNAL_H
#include "smart_pwm.h"
/*
1.OBU发出车辆解锁信号，依次显示白色和蓝色的欢迎动画，由内向两侧示阔，进行两次示阔。
2.OBU发出车辆上锁信号，显示黄色再见动画，由两侧外向内收缩。
3.OBU发出车辆转向信号，左转；向左进行流动，右转：向右流动，循环10次。（蓝色）
4.OBU发出车辆预警信号，红色灯光闪烁。收到预警解除信号后，停止闪烁。
5.OBU发出车辆充电信号，绿色灯光进行堆栈模式，模拟手机充电显示。
*/
#define UNLOCK_TEST     0 /*解锁测试开关宏*/
#define LOCK_TEST       0 /*上锁测试开关宏*/
#define TURN_LEFT_TEST  0 /*左转测试开关宏*/
#define TURN_RIGHT_TEST 0 /*右转测试开关宏*/
#define WARNING_TEST    0 /*预警测试开关宏*/
#define CHARGE_TEST     1 /*充电测试开关宏*/

typedef enum
{
    NO_INS,     /*无新指令需要处理*/
    NEW_INS    /*有新指令需要处理*/
}rx_flag;

typedef union 
{
    struct
    {
        uint8_t L_mode : 4;                     /*灯光模式*/
        uint8_t B_change : 3;                   /*亮度变化*/
        uint8_t V_battery : 7;                  /*整车电量0-100*/
        uint8_t rx_reserve : 2;                 /*保留50bit*/
    
        uint8_t rx_reserve1 : 8;                 /*保留50bit*/
        uint8_t rx_reserve2 : 8;                 /*保留50bit*/
        uint8_t rx_reserve3 : 8;                 /*保留50bit*/
        uint8_t rx_reserve4 : 8;                 /*保留50bit*/
        uint8_t rx_reserve5 : 8;                 /*保留50bit*/
        uint8_t rx_reserve6 : 8;                 /*保留50bit*/
    }sig;
    uint8_t rx_data[8];                 /*CAN接受数据buff*/
}rx_uno;                                /*CAN接受数据联合体*/

typedef struct 
{
    rx_flag can_rx_fg;          /*CAN中断有新指令效果需要处理*/
    rx_flag Rgb_now_fg;         /*RGB有新颜色需要处理*/
    rx_uno can_rx_uno;          /*CAN接受数据联合体*/
}can_rx;

Light_effect rt_L_mode(void);
void st_Rgb_now(rx_flag fg);
rx_flag rt_Rgb_now(void);
void can_rx_Msg_Callback(uint8_t * byte);

void can_signal_main(void);
#endif
